package com.promonkey.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * Created by promonkey on 2017/2/22.
 */
public class StewardInvocationHandler implements InvocationHandler {

    // 目标对象
    private Object object;

    /**
     * 构造方法
     *
     * @param object 需要被代理的对象（目标对象）
     */
    public StewardInvocationHandler(Object object) {
        super();
        this.object = object;
    }

    /**
     * 执行目标对象（被代理对象）的方法
     *
     * @param proxy
     * @param method
     * @param args
     * @return
     * @throws Throwable
     */
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 管家在被管理对象（宠物或保姆）有行为操作时记录时间
        logger();
        // 执行被管理对象的操作
        Object result = method.invoke(object, args);
        return result;
    }

    /**
     * 获得目标对象的代理对象（获得管家对象）
     *
     * @return 返回代理对象（管家）
     */
    public Object getProxyObject() {
        return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), object.getClass().getInterfaces(), this);
    }

    //时间记录
    public void logger() {
        System.out.println(">>>>>Time： " + System.currentTimeMillis());
    }
}
